#pragma once

#include <memory>

#include "common.h"
#include "idataset.h"
#include "iimage.h"
#include "inetwork.h"
#include "iprint.h"


class DCM_DEV_TOOLKIT_API DCMFactory final
{
public:
    static std::shared_ptr<IDataSet>
    CreateDataSetInstance();

    static std::shared_ptr<IImage>
    CreateImageInstance();

    static std::shared_ptr<IImage>
    CreateImageInstance(
        const std::string&         aDCMFile
    );

    static std::shared_ptr<IImage>
    CreateImageInstance(
        std::shared_ptr<IDataSet>  aDataSet
    );

    static std::shared_ptr<INetwork>
    CreateNetworkInstance();

    static std::shared_ptr<IDCMPrint>
    CreatePrintInstance(
        const std::string&         aFont
    );
};
